//------------------------------------------------------------------------------------------------------------------
//CONSTANTES
//------------------------------------------------------------------------------------------------------------------
var KEY_TIPO_REPORTE_FLUJOS_POR_APROBAR = "FlujosPorAprobar";
var KEY_TIPO_REPORTE_FLUJOS_POR_ESTADO = "FlujosPorEstado";

//-------------------------------------------------------------------------------------
//Descripcion : obtiene la llave del Reporte... y otros valores mas
//Por         : VSR, 01/02/2010
function REP_ObtenerKeyReporte(){
  var ddlReporte = document.getElementById(prefijoControl +"ddlReporte_ddlCombo");
  var queryString = "";
  var idReporte = "";

  try {
    idReporte = (IsValid_Empty(ddlReporte)) ? "-1":ddlReporte.value;
    //construye queryString
    queryString += "page=Workflow.HttpAjax";
    queryString += "&op=ObtenerKeyReporteJSON";
    queryString += "&idReporte="+ idReporte;

    var okFunc = function(t) {
      var respuesta = jQuery.trim(t);
      if (respuesta == CONST_CODIGO_SQL_ERROR) {
        alert("Ha ocurrido un error interno y no se pudo obtener la llave del tipo reporte");
      }
      else {
        REP_CargarDatosReporte(respuesta);
      }
    }
    var errFunc = function(t) {
      alert("Ha ocurrido un error interno y no se pudo obtener la llave del tipo reporte");
    }
    jQuery.ajax({
      url: "index.php",
      type: "post",
      async: false,
      data: queryString,
      success: okFunc,
      error: errFunc
    });
  }
  catch(e){
    if (e.description){ //para IE
      alert("Exception:\n" + e.description)
    }
    else{ // otro navegador
      alert("Exception:\n" + e)
    }
    return false;
  }
}

//------------------------------------------------------------------------------------
//Descripcion: carga los datos relacionados con el reporte seleccionado
//Por        : VSR, 14/04/2012
function REP_CargarDatosReporte(estructuraJSON){
  var txtKeyReporte = document.getElementById(prefijoControl +"txtKeyReporte");
  var txtFormatoDocumento = document.getElementById(prefijoControl +"txtFormatoDocumento");
  var lblFormatoReporte = document.getElementById(prefijoControl +"lblFormatoReporte");
  var data = jQuery.parseJSON(estructuraJSON);
  var sinDato = "";
  var themeBaseUrl = obtenerThemeBaseUrl();

  try {
    if(data){
      if(data.length == 0){
        txtKeyReporte.value = sinDato;
        txtFormatoDocumento.value = sinDato;
      } else {
        data = data[0];
        txtKeyReporte.value = (data.Llave) ? data.Llave:sinDato;
        txtFormatoDocumento.value = (data.FormatoDocumento) ? data.FormatoDocumento:sinDato;

        if(data.FormatoDocumento=="excel"){
          lblFormatoReporte.innerHTML = "<img src='"+ themeBaseUrl +"/img/ico-excel.png' alt='excel' title='excel' />";
        } else if(data.FormatoDocumento=="word"){
          lblFormatoReporte.innerHTML = "<img src='"+ themeBaseUrl +"/img/ico-word.png' alt='word' title='word' />";
        } else if(data.FormatoDocumento=="pdf"){
          lblFormatoReporte.innerHTML = "<img src='"+ themeBaseUrl +"/img/ico-pdf.png' alt='pdf' title='pdf' />";
        } else {
          lblFormatoReporte.innerHTML = "<img src='"+ themeBaseUrl +"/img/ico-excel.png' alt='excel' title='excel' />";
        }
      }
    }
    else{
      txtKeyReporte.value = sinDato;
      txtFormatoDocumento.value = sinDato;
      alert("No se pudo cargar los datos del Reporte");
    }
  }
  catch(e){
    if (e.description){ //para IE
      txtKeyReporte.value = sinDato;
      txtFormatoDocumento.value = sinDato;
      alert("Exception:\n" + e.description)
    }
    else{ // otro navegador
      txtKeyReporte.value = sinDato;
      txtFormatoDocumento.value = sinDato;
      alert("Exception:\n" + e)
    }
    return false;
  }
}


//-------------------------------------------------------------------------------------
//Descripcion : muestra los controles relacionados con el tipo de evento seleccionado
//Por         : VSR, 14/04/2012
function REP_MostrarControlesReporte(){
  REP_ObtenerKeyReporte();
  var txtKeyReporte = document.getElementById(prefijoControl +"txtKeyReporte");
  var keyReporte = txtKeyReporte.value;

  //si no selecciona ningun valor entonces oculta todos los controles
  if(IsValid_Empty(txtKeyReporte)){
    REP_SetVisibleControlesFull(false);
  }
  else{
    //oculta todos los controles
    REP_SetVisibleControlesFull(false);
    //obtiene la key para saber que controles mostrar
    switch(keyReporte){
      case KEY_TIPO_REPORTE_FLUJOS_POR_APROBAR:
        REP_SetVisibleControlesFlujosPorAprobar(true);
        break;
      case KEY_TIPO_REPORTE_FLUJOS_POR_ESTADO:
        REP_SetVisibleControlesFlujosPorEstado(true);
        break;
      default:
        REP_SetVisibleControlesGenerales(true);
    }
  }
}

//-------------------------------------------------------------------------------------
//Descripcion : genera el Reporte segun la opcion seleccionada
//Por         : VSR, 14/04/2012
function REP_GenerarReporte(pagina){
  var txtKeyReporte = document.getElementById(prefijoControl +"txtKeyReporte");
  var keyReporte = txtKeyReporte.value;
  var queryString = "";
  var listadoDatosTipoReporte = "";

  try {
    listadoDatosTipoReporte = REP_ObtenerEstructuraDatosTipoReporte(keyReporte);
    //construye queryString
    queryString += "page=Workflow.HttpGenerarReporte";
    queryString += "&op=REP_"+ Url.encode(keyReporte);
    queryString += "&listadoDatos="+ Url.encode(listadoDatosTipoReporte);
    queryString += "&pagina="+ Url.encode(pagina);

    REP_ValidarGeneracionReporte({mostrarModal:true});

    //envia valores para generar el excel
    top.location.href = "index.php?"+ queryString;
  }
  catch(e){
    if (e.description){ //para IE
      alert("Exception:\n" + e.description)
    }
    else{ // otro navegador
      alert("Exception:\n" + e)
    }
    return false;
  }
}

//------------------------------------------------------------------------------------
//Descripcion : valida si se genero el reporte
//Por         : VSR, 09/09/2010
function REP_ValidarGeneracionReporte(opciones){
  var queryString = "";
  var idGenerarReporte;

  //construye queryString
  queryString += "page=Workflow.HttpAjax";
  queryString += "&op=ObtenerGeneracionReporte";

  var okFunc = function(t) {
    var respuesta = jQuery.trim(t);
    if (respuesta == CONST_CODIGO_SQL_ERROR) {
      alert("Ha ocurrido un error interno y no se pudo obtener la generación del reporte");
    }
    else {
      //vuelve a monitear la sesion despues de X segundos
      if (respuesta == "0") {
        if(opciones.mostrarModal){
          var textoModal = generarTextoHtmlModal("Generando reporte, espere un momento por favor...");
          jQuery.modal(textoModal,{minHeight: HEIGHT_MENSAJE_RESPUESTA, minWidth: WIDTH_MENSAJE_RESPUESTA});
        }
        idGenerarReporte = window.setTimeout("REP_ValidarGeneracionReporte({mostrarModal:false})", 1000);
      } else {
        window.clearTimeout(idGenerarReporte);
        jQuery.modal.close();
      }

    }
  }
  var errFunc = function(t) {
    alert("Ha ocurrido un error interno y no se pudo obtener la generación del reporte");
  }
  jQuery.ajax({
    url: "index.php",
    type: "post",
    async: false,
    data: queryString,
    success: okFunc,
    error: errFunc
  });
}


//###########################################################################
//# REP_SetVisiblesControles<tipo_reporte>
//###########################################################################
//------------------------------------------------------------------------------------------------------------------
//Descripcion : activa o desactiva todos los controles segun como lo indique el valor esVisible
//Por         : VSR, 14/04/2012
function REP_SetVisibleControlesFull(esVisible){
  var pnlMensajeUsuario = document.getElementById(prefijoControl +"pnlMensajeUsuario");
  pnlMensajeUsuario.innerHTML = "";

  REP_SetVisibleControlesGenerales(esVisible);
  REP_SetVisibleControlesFlujosPorAprobar(esVisible);
  REP_SetVisibleControlesFlujosPorEstado(esVisible);
}

//------------------------------------------------------------------------------------------------------------------
//Descripcion : activa o desactiva los controles generales
//Por         : VSR, 14/04/2012
function REP_SetVisibleControlesGenerales(esVisible){
  var hFiltroFechaDesde = document.getElementById(prefijoControl + "hFiltroFechaDesde");
  var txtFiltroFechaDesde = document.getElementById(prefijoControl + "txtFiltroFechaDesde");
  var hFiltroFechaHasta = document.getElementById(prefijoControl + "hFiltroFechaHasta");
  var txtFiltroFechaHasta = document.getElementById(prefijoControl + "txtFiltroFechaHasta");
  var hFormatoReporte = document.getElementById(prefijoControl + "hFormatoReporte");

  //valores por defecto
  var display = "block";

  //si se tiene que activar los controles entonces cambian las propiedades
  if(!esVisible){
    display = "none";
  }
  //setea las propiedades
  hFiltroFechaDesde.style.display = display;
  hFiltroFechaHasta.style.display = display;
  hFormatoReporte.style.display = display;

  //limpia los controles
  formatearEstiloNormal(txtFiltroFechaDesde,"", true, false, "", "");
  formatearEstiloNormal(txtFiltroFechaHasta,"", true, false, "", "");
}

//------------------------------------------------------------------------------------------------------------------
//Descripcion : activa o desactiva los controles "FlujosPorAprobar"
//Por         : VSR, 14/04/2012
function REP_SetVisibleControlesFlujosPorAprobar(esVisible){
  var hFiltroFechaDesde = document.getElementById(prefijoControl + "hFiltroFechaDesde");
  var txtFiltroFechaDesde = document.getElementById(prefijoControl + "txtFiltroFechaDesde");
  var hFiltroFechaHasta = document.getElementById(prefijoControl + "hFiltroFechaHasta");
  var txtFiltroFechaHasta = document.getElementById(prefijoControl + "txtFiltroFechaHasta");
  var hFormatoReporte = document.getElementById(prefijoControl + "hFormatoReporte");

  //valores por defecto
  var display = "block";

  //si se tiene que activar los controles entonces cambian las propiedades
  if(!esVisible){
    display = "none";
  }
  //setea las propiedades
  hFiltroFechaDesde.style.display = display;
  hFiltroFechaHasta.style.display = display;
  hFormatoReporte.style.display = display;

  //limpia los controles
  formatearEstiloNormal(txtFiltroFechaDesde,"", true, false, "", "");
  formatearEstiloNormal(txtFiltroFechaHasta,"", true, false, "", "");
}

//------------------------------------------------------------------------------------------------------------------
//Descripcion : activa o desactiva los controles "FlujosPorEstado"
//Por         : VSR, 14/04/2012
function REP_SetVisibleControlesFlujosPorEstado(esVisible){
  var hFiltroFechaDesde = document.getElementById(prefijoControl + "hFiltroFechaDesde");
  var txtFiltroFechaDesde = document.getElementById(prefijoControl + "txtFiltroFechaDesde");
  var hFiltroFechaHasta = document.getElementById(prefijoControl + "hFiltroFechaHasta");
  var txtFiltroFechaHasta = document.getElementById(prefijoControl + "txtFiltroFechaHasta");
  var hFiltroFlujoEstado = document.getElementById(prefijoControl + "hFiltroFlujoEstado");
  var ddlFlujoEstado = document.getElementById(prefijoControl + "ddlFlujoEstado_ddlCombo");
  var hFormatoReporte = document.getElementById(prefijoControl + "hFormatoReporte");

  //valores por defecto
  var display = "block";

  //si se tiene que activar los controles entonces cambian las propiedades
  if(!esVisible){
    display = "none";
  }
  //setea las propiedades
  hFiltroFechaDesde.style.display = display;
  hFiltroFechaHasta.style.display = display;
  hFormatoReporte.style.display = display;
  hFiltroFlujoEstado.style.display = display;

  //limpia los controles
  formatearEstiloNormal(txtFiltroFechaDesde,"", true, false, "", "");
  formatearEstiloNormal(txtFiltroFechaHasta,"", true, false, "", "");
  formatearEstiloNormal(ddlFlujoEstado,"", true, false, "", "");
}


//###########################################################################
//# REP_ValidarControles<tipo_reporte>
//###########################################################################
//----------------------------------------------------------------------------------------------------------------
//Descripcion: valida los datos ingresados en el formulario de busqueda
//Por        : VSR, 24/07/2009
function REP_ValidarFormulario(){
  validationEngineClearCountCustomError();
  var ddlReporte  = document.getElementById(prefijoControl + "ddlReporte_ddlCombo");
  var txtKeyReporte = document.getElementById(prefijoControl +"txtKeyReporte");

  //valida Tipo Reporte
  if(IsValid_ComboVacio(ddlReporte)){
    jQuery.validationEngine.addPromptError(prefijoControl + "ddlReporte_ddlCombo", "* Este campo es requerido");
  }
  else{
    jQuery.validationEngine.removePrompt(prefijoControl + "ddlReporte_ddlCombo");
  }

  //valida controles por tipo reporte
  GEN_MostrarMensajesError(REP_ValidarControles(txtKeyReporte));

  var retorno = jQuery(NOMBRE_FORM_PRADO_JQUERY).validationEngine({returnIsValid: true});
  if (retorno) {
    REP_GenerarReporte("Workflow.FrmReporte");
  }
  return false;
}

//------------------------------------------------------------------------------------------------------------------
//Descripcion : valida los datos ingresados en los controles asociados al tipo de reporte
//Por         : VSR, 14/04/2012
function REP_ValidarControles(txtKeyReporte){
  var msgError = "";
  //si no selecciona ningun valor entonces oculta todos los controles
  if(!IsValid_Empty(txtKeyReporte)){
    //obtiene la key para saber que controles mostrar
    var keyReporte = txtKeyReporte.value;
    switch(keyReporte){
      case KEY_TIPO_REPORTE_FLUJOS_POR_APROBAR:
        msgError += REP_ValidarControlesFlujosPorAprobar();
        break;
      case KEY_TIPO_REPORTE_FLUJOS_POR_ESTADO:
        msgError += REP_ValidarControlesFlujosPorEstado();
        break;
      default:
        msgError += REP_ValidarControlesGenerales();
    }
  }
  return eval("["+ msgError +"]");
}

//------------------------------------------------------------------------------------------------------------------
//Descripcion : valida los datos ingresados en los controles generales
//Por         : VSR, 14/04/2012
function REP_ValidarControlesGenerales() {
  var msgError = "";
  var jsonMensajeError = "{\"control\":\"{$CONTROL}\",\"mensaje\":\"{$MENSAJE}\"}";
  var auxJSONMensajeError = "";
  var txtFiltroFechaDesde = document.getElementById(prefijoControl + "txtFiltroFechaDesde");
  var txtFiltroFechaHasta = document.getElementById(prefijoControl + "txtFiltroFechaHasta");

  //valida Fecha Desde
  auxJSONMensajeError = jsonMensajeError;
  if(!IsValid_Empty(txtFiltroFechaDesde)){
    if(!IsValid_Date(txtFiltroFechaDesde)){
      auxJSONMensajeError = auxJSONMensajeError.replace("{$CONTROL}", txtFiltroFechaDesde.id).replace("{$MENSAJE}", "* Fecha inv&aacute;lida");
      msgError += ((msgError=="") ? "":",") + auxJSONMensajeError;
    }
    else {
      auxJSONMensajeError = auxJSONMensajeError.replace("{$CONTROL}", txtFiltroFechaDesde.id).replace("{$MENSAJE}", "");
      msgError += ((msgError == "") ? "" : ",") + auxJSONMensajeError;
    }
  } else {
    auxJSONMensajeError = auxJSONMensajeError.replace("{$CONTROL}", txtFiltroFechaDesde.id).replace("{$MENSAJE}", "");
    msgError += ((msgError == "") ? "" : ",") + auxJSONMensajeError;
  }

  //valida Fecha Hasta
  auxJSONMensajeError = jsonMensajeError;
  if(!IsValid_Empty(txtFiltroFechaHasta)){
    if(!IsValid_Date(txtFiltroFechaHasta)){
      auxJSONMensajeError = auxJSONMensajeError.replace("{$CONTROL}", txtFiltroFechaHasta.id).replace("{$MENSAJE}", "* Fecha inv&aacute;lida");
      msgError += ((msgError=="") ? "":",") + auxJSONMensajeError;
    }
    else {
      auxJSONMensajeError = auxJSONMensajeError.replace("{$CONTROL}", txtFiltroFechaHasta.id).replace("{$MENSAJE}", "");
      msgError += ((msgError == "") ? "" : ",") + auxJSONMensajeError;
    }
  } else {
    auxJSONMensajeError = auxJSONMensajeError.replace("{$CONTROL}", txtFiltroFechaHasta.id).replace("{$MENSAJE}", "");
    msgError += ((msgError == "") ? "" : ",") + auxJSONMensajeError;
  }

  //valida que la fecha de hasta no sea menor que fecha desde
  auxJSONMensajeError = jsonMensajeError;
  if(!IsValid_Empty(txtFiltroFechaDesde) && !IsValid_Empty(txtFiltroFechaHasta) && IsValid_Date(txtFiltroFechaDesde) && IsValid_Date(txtFiltroFechaHasta)){
    //construye objetos fechas para compararlos
    var newFechaDesde = getDate(txtFiltroFechaDesde.value, "00:00");
    var newFechaHasta = getDate(txtFiltroFechaHasta.value, "00:00");

    //compara las fechas, si hay error muestra mensaje sino envia formulario
    if(newFechaDesde > newFechaHasta) {
      auxJSONMensajeError = auxJSONMensajeError.replace("{$CONTROL}", txtFiltroFechaDesde.id).replace("{$MENSAJE}", "* No puede ser mayor que Fecha Hasta");
      msgError += ((msgError=="") ? "":",") + auxJSONMensajeError;
    }
    else{
      auxJSONMensajeError = auxJSONMensajeError.replace("{$CONTROL}", txtFiltroFechaDesde.id).replace("{$MENSAJE}", "");
      msgError += ((msgError == "") ? "" : ",") + auxJSONMensajeError;
    }
  }

  return msgError;
}

//------------------------------------------------------------------------------------------------------------------
//Descripcion : valida los datos ingresados en los controles "FlujosPorAprobar"
//Por         : VSR, 14/04/2012
function REP_ValidarControlesFlujosPorAprobar() {
  var msgError = "";
  var jsonMensajeError = "{\"control\":\"{$CONTROL}\",\"mensaje\":\"{$MENSAJE}\"}";
  var auxJSONMensajeError = "";
  var txtFiltroFechaDesde = document.getElementById(prefijoControl + "txtFiltroFechaDesde");
  var txtFiltroFechaHasta = document.getElementById(prefijoControl + "txtFiltroFechaHasta");

  //valida Fecha Desde
  auxJSONMensajeError = jsonMensajeError;
  if(!IsValid_Empty(txtFiltroFechaDesde)){
    if(!IsValid_Date(txtFiltroFechaDesde)){
      auxJSONMensajeError = auxJSONMensajeError.replace("{$CONTROL}", txtFiltroFechaDesde.id).replace("{$MENSAJE}", "* Fecha inv&aacute;lida");
      msgError += ((msgError=="") ? "":",") + auxJSONMensajeError;
    }
    else {
      auxJSONMensajeError = auxJSONMensajeError.replace("{$CONTROL}", txtFiltroFechaDesde.id).replace("{$MENSAJE}", "");
      msgError += ((msgError == "") ? "" : ",") + auxJSONMensajeError;
    }
  } else {
    auxJSONMensajeError = auxJSONMensajeError.replace("{$CONTROL}", txtFiltroFechaDesde.id).replace("{$MENSAJE}", "");
    msgError += ((msgError == "") ? "" : ",") + auxJSONMensajeError;
  }

  //valida Fecha Hasta
  auxJSONMensajeError = jsonMensajeError;
  if(!IsValid_Empty(txtFiltroFechaHasta)){
    if(!IsValid_Date(txtFiltroFechaHasta)){
      auxJSONMensajeError = auxJSONMensajeError.replace("{$CONTROL}", txtFiltroFechaHasta.id).replace("{$MENSAJE}", "* Fecha inv&aacute;lida");
      msgError += ((msgError=="") ? "":",") + auxJSONMensajeError;
    }
    else {
      auxJSONMensajeError = auxJSONMensajeError.replace("{$CONTROL}", txtFiltroFechaHasta.id).replace("{$MENSAJE}", "");
      msgError += ((msgError == "") ? "" : ",") + auxJSONMensajeError;
    }
  } else {
    auxJSONMensajeError = auxJSONMensajeError.replace("{$CONTROL}", txtFiltroFechaHasta.id).replace("{$MENSAJE}", "");
    msgError += ((msgError == "") ? "" : ",") + auxJSONMensajeError;
  }

  //valida que la fecha de hasta no sea menor que fecha desde
  auxJSONMensajeError = jsonMensajeError;
  if(!IsValid_Empty(txtFiltroFechaDesde) && !IsValid_Empty(txtFiltroFechaHasta) && IsValid_Date(txtFiltroFechaDesde) && IsValid_Date(txtFiltroFechaHasta)){
    //construye objetos fechas para compararlos
    var newFechaDesde = getDate(txtFiltroFechaDesde.value, "00:00");
    var newFechaHasta = getDate(txtFiltroFechaHasta.value, "00:00");

    //compara las fechas, si hay error muestra mensaje sino envia formulario
    if(newFechaDesde > newFechaHasta) {
      auxJSONMensajeError = auxJSONMensajeError.replace("{$CONTROL}", txtFiltroFechaDesde.id).replace("{$MENSAJE}", "* No puede ser mayor que Fecha Hasta");
      msgError += ((msgError=="") ? "":",") + auxJSONMensajeError;
    }
    else{
      auxJSONMensajeError = auxJSONMensajeError.replace("{$CONTROL}", txtFiltroFechaDesde.id).replace("{$MENSAJE}", "");
      msgError += ((msgError == "") ? "" : ",") + auxJSONMensajeError;
    }
  }

  return msgError;
}

//------------------------------------------------------------------------------------------------------------------
//Descripcion : valida los datos ingresados en los controles "FlujosPorEstado"
//Por         : VSR, 14/04/2012
function REP_ValidarControlesFlujosPorEstado() {
  var msgError = "";
  var jsonMensajeError = "{\"control\":\"{$CONTROL}\",\"mensaje\":\"{$MENSAJE}\"}";
  var auxJSONMensajeError = "";
  var txtFiltroFechaDesde = document.getElementById(prefijoControl + "txtFiltroFechaDesde");
  var txtFiltroFechaHasta = document.getElementById(prefijoControl + "txtFiltroFechaHasta");

  //valida Fecha Desde
  auxJSONMensajeError = jsonMensajeError;
  if(!IsValid_Empty(txtFiltroFechaDesde)){
    if(!IsValid_Date(txtFiltroFechaDesde)){
      auxJSONMensajeError = auxJSONMensajeError.replace("{$CONTROL}", txtFiltroFechaDesde.id).replace("{$MENSAJE}", "* Fecha inv&aacute;lida");
      msgError += ((msgError=="") ? "":",") + auxJSONMensajeError;
    }
    else {
      auxJSONMensajeError = auxJSONMensajeError.replace("{$CONTROL}", txtFiltroFechaDesde.id).replace("{$MENSAJE}", "");
      msgError += ((msgError == "") ? "" : ",") + auxJSONMensajeError;
    }
  } else {
    auxJSONMensajeError = auxJSONMensajeError.replace("{$CONTROL}", txtFiltroFechaDesde.id).replace("{$MENSAJE}", "");
    msgError += ((msgError == "") ? "" : ",") + auxJSONMensajeError;
  }

  //valida Fecha Hasta
  auxJSONMensajeError = jsonMensajeError;
  if(!IsValid_Empty(txtFiltroFechaHasta)){
    if(!IsValid_Date(txtFiltroFechaHasta)){
      auxJSONMensajeError = auxJSONMensajeError.replace("{$CONTROL}", txtFiltroFechaHasta.id).replace("{$MENSAJE}", "* Fecha inv&aacute;lida");
      msgError += ((msgError=="") ? "":",") + auxJSONMensajeError;
    }
    else {
      auxJSONMensajeError = auxJSONMensajeError.replace("{$CONTROL}", txtFiltroFechaHasta.id).replace("{$MENSAJE}", "");
      msgError += ((msgError == "") ? "" : ",") + auxJSONMensajeError;
    }
  } else {
    auxJSONMensajeError = auxJSONMensajeError.replace("{$CONTROL}", txtFiltroFechaHasta.id).replace("{$MENSAJE}", "");
    msgError += ((msgError == "") ? "" : ",") + auxJSONMensajeError;
  }

  //valida que la fecha de hasta no sea menor que fecha desde
  auxJSONMensajeError = jsonMensajeError;
  if(!IsValid_Empty(txtFiltroFechaDesde) && !IsValid_Empty(txtFiltroFechaHasta) && IsValid_Date(txtFiltroFechaDesde) && IsValid_Date(txtFiltroFechaHasta)){
    //construye objetos fechas para compararlos
    var newFechaDesde = getDate(txtFiltroFechaDesde.value, "00:00");
    var newFechaHasta = getDate(txtFiltroFechaHasta.value, "00:00");

    //compara las fechas, si hay error muestra mensaje sino envia formulario
    if(newFechaDesde > newFechaHasta) {
      auxJSONMensajeError = auxJSONMensajeError.replace("{$CONTROL}", txtFiltroFechaDesde.id).replace("{$MENSAJE}", "* No puede ser mayor que Fecha Hasta");
      msgError += ((msgError=="") ? "":",") + auxJSONMensajeError;
    }
    else{
      auxJSONMensajeError = auxJSONMensajeError.replace("{$CONTROL}", txtFiltroFechaDesde.id).replace("{$MENSAJE}", "");
      msgError += ((msgError == "") ? "" : ",") + auxJSONMensajeError;
    }
  }

  return msgError;
}


//###########################################################################
//# REP_ObtenerEstructuraValores<tipo_reporte>
//###########################################################################
//------------------------------------------------------------------------------------------------------------------
//Descripcion : obtiene valores de los controles en una estructura json
//Por         : VSR, 14/04/2012
function REP_ObtenerEstructuraDatosTipoReporte(keyTipoReporte){
  var estructura = "";
  //obtiene la key para saber que controles mostrar
  switch(keyTipoReporte){
    case KEY_TIPO_REPORTE_FLUJOS_POR_APROBAR:
      estructura = REP_ObtenerEstructuraValoresFlujoPorAprobar();
      break;
    case KEY_TIPO_REPORTE_FLUJOS_POR_ESTADO:
      estructura = REP_ObtenerEstructuraValoresFlujoPorEstado();
      break;
    default:
      estructura = REP_ObtenerEstructuraValoresGenerales();
  }
  return estructura;
}

//------------------------------------------------------------------------------------------------------------------
//Descripcion : obtiene valores de los controles en una estructura json "Generales"
//Por         : VSR, 14/04/2012
function REP_ObtenerEstructuraValoresGenerales(){
  var json = "";
  var txtFiltroFechaDesde = document.getElementById(prefijoControl + "txtFiltroFechaDesde");
  var txtFiltroFechaHasta = document.getElementById(prefijoControl + "txtFiltroFechaHasta");
  var txtIdEmpresa = document.getElementById(prefijoControl + "txtIdEmpresa");

  json +="{";
  json +=" \"fechaDesde\":\""+ Url.encode(txtFiltroFechaDesde.value)+"\"";
  json +=",\"fechaHasta\":\""+ Url.encode(txtFiltroFechaHasta.value)+"\"";
  json +=",\"idEmpresa\":\""+ Url.encode(txtIdEmpresa.value)+"\"";
  json +="}";

  return json;
}

//------------------------------------------------------------------------------------------------------------------
//Descripcion : obtiene valores de los controles en una estructura json "FlujosPorAprobar"
//Por         : VSR, 14/04/2012
function REP_ObtenerEstructuraValoresFlujoPorAprobar(){
  var json = "";
  var txtFiltroFechaDesde = document.getElementById(prefijoControl + "txtFiltroFechaDesde");
  var txtFiltroFechaHasta = document.getElementById(prefijoControl + "txtFiltroFechaHasta");
  var txtIdEmpresa = document.getElementById(prefijoControl + "txtIdEmpresa");

  json +="{";
  json +=" \"fechaDesde\":\""+ Url.encode(txtFiltroFechaDesde.value)+"\"";
  json +=",\"fechaHasta\":\""+ Url.encode(txtFiltroFechaHasta.value)+"\"";
  json +=",\"idEmpresa\":\""+ Url.encode(txtIdEmpresa.value)+"\"";
  json +="}";

  return json;
}

//------------------------------------------------------------------------------------------------------------------
//Descripcion : obtiene valores de los controles en una estructura json "FlujosPorEstado"
//Por         : VSR, 14/04/2012
function REP_ObtenerEstructuraValoresFlujoPorEstado(){
  var json = "";
  var txtFiltroFechaDesde = document.getElementById(prefijoControl + "txtFiltroFechaDesde");
  var txtFiltroFechaHasta = document.getElementById(prefijoControl + "txtFiltroFechaHasta");
  var txtIdEmpresa = document.getElementById(prefijoControl + "txtIdEmpresa");
  var ddlFlujoEstado = document.getElementById(prefijoControl + "ddlFlujoEstado_ddlCombo");

  json +="{";
  json +=" \"fechaDesde\":\""+ Url.encode(txtFiltroFechaDesde.value)+"\"";
  json +=",\"fechaHasta\":\""+ Url.encode(txtFiltroFechaHasta.value)+"\"";
  json +=",\"idEmpresa\":\""+ Url.encode(txtIdEmpresa.value)+"\"";
  json +=",\"idFlujoEstado\":\""+ Url.encode(ddlFlujoEstado.value)+"\"";
  json +="}";

  return json;
}